home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-11-30 | 11.8 KB | 356 lines | [TEXT/MPS ] |
- ; File: SCSI.a
- ;
- ; Copyright: © 1983-1993 by Apple Computer, Inc.
- ; All rights reserved.
- ;
- ; Version: System 7.1 for ETO #11
- ; Created: Tuesday, March 30, 1993 18:00
- ;
- ;___________________________________________________________________________
-
- IF &TYPE('__INCLUDINGSCSI__') = 'UNDEFINED' THEN
- __INCLUDINGSCSI__ SET 1
-
- IF &TYPE('__INCLUDINGTRAPS__') = 'UNDEFINED' THEN
- INCLUDE 'Traps.a'
- ENDIF
-
- ; misc SCSI driver equates
-
- scMacID EQU $80 ; SCSI ID for Macintosh Plus (bit 7)
- SCSIDrvrs EQU $B2E ; (word) bitmap for loaded SCSI drivers
-
- ; SCSI error codes
-
- scCommErr EQU 2 ; communications error (operation timeout)
- scArbNBErr EQU 3 ; arbitration timeout waiting for not BSY
- scBadparmsErr EQU 4 ; bad parameter or TIB opcode
- scPhaseErr EQU 5 ; SCSI bus not in correct phase for attempted operation
- scCompareErr EQU 6 ; data compare error
- scMgrBusyErr EQU 7 ; SCSI Manager busy with another operation
- ; when SCSIGet was called
-
- scSequenceErr EQU 8 ; attempted operation is out of sequence;
- ; e.g., calling SCSISelect before doing
- ; SCSIGet. Incorrectly written drivers
- ; can cause this error.
-
- scBusTOErr EQU 9 ; CPU bus timeout when attempting read or
- ; write in pseudo-DMA mode -- indicates
- ; that the data wasn't ready within the
- ; 'bus timeout' period. (Mac SE & Mac II only)
-
- scComplPhaseErr EQU 10 ; SCSI bus wasn't in Status phase when
- ; SCSIComplete was called -- the SCSI
- ; Manager may have had to throw away data
- ; (or write 'filler' bytes) in order to
- ; reach the Status phase. Indicates that
- ; the driver didn't handle SCSI bus phase
- ; changes correctly.
-
-
- ; misc SCSI driver equates
-
- scDefaultID EQU 7 ; default CPU SCSI id
-
- ;---------------------------------------------------
- ;
- ; the information pertaining to the read/write
- ; command block interpreter.
- ;
- ; SCSI command block equates.
- ;
-
- scOpcode EQU 0 ; offsets into command "line" for data xfer
- scParam1 EQU 2
- scParam2 EQU 6
- scSize EQU 10 ; size of a command line
-
-
- scInc EQU 1 ; xfer with address increment
- scNoInc EQU 2 ; xfer without address increment
- scAdd EQU 3 ; add count to address
- scMove EQU 4 ; MOVE data from addr1 to addr2
- scLoop EQU 5 ; decrement loop counter and branch
- scNop EQU 6 ; do very little
- scStop EQU 7 ; then stop doing even that
- scComp EQU 8 ; compare bytes with address increment
-
- ;
- ; The layout of block 0 of a bootable SCSI device.
- ;
-
- sbSigWord EQU $4552 ; block 0 validator
- sbSig EQU 0 ; signature word
- sbBlkSize EQU 2 ; block size of device
- sbBlkCount EQU 4 ; # blocks on device
- sbDevType EQU 8 ; device type code
- sbDevID EQU 10
- sbData EQU 12 ; start of data section
- sbDrvCount EQU 16 ; # drivers following
- sbDrvrs EQU 18 ; start of driver descriptors
-
- ; Driver descriptors
-
- ddBlock EQU 0 ; physical block of driver
- ddSize EQU 4 ; block count of driver
- ddType EQU 6 ; Processor type of driver
- ddLen EQU 8
- sbMac EQU 1 ; Macintosh driver type
-
- ;
- ; Partition Descriptors
- ;
- pdSigWord EQU $5453 ; block 1 validator
- pmSig EQU 0 ; unique value for map entry blk
- pmSigPad EQU 2 ; currently unused
- pmMapBlkCnt EQU 4 ; # of blks in partition map
- pmPyPartStart EQU 8 ; first physical block of partition
- pmPartBlkCnt EQU 12 ; number of blocks in partition
- pmPartName EQU 16 ; ASCII partition name
- pmParType EQU 48 ; ASCII partition type
- pmLgDataStart EQU 80 ; log. # of partition's 1st data blk
- pmDataCnt EQU 84 ; # of blks in partition's data area
- pmPartStatus EQU 88 ; bit field for partition status
- pmLgBootStart EQU 92 ; logical blk of partition's boot code
- pmBootSize EQU 96 ; number of bytes in boot code
- pmBootAddr EQU 100 ; memory load address of boot code
- pmBootAddr2 EQU 104 ; currently unused
- pmBootEntry EQU 108 ; entry point of boot code
- pmBootEntry2 EQU 112 ; currently unused
- pmBootCksum EQU 116 ; checksum of boot code
- pmProcessor EQU 120 ; ASCII for the processor type
- pmPad EQU 124 ; 512 bytes long, currently unused
-
-
- hfsID EQU 'TFS1' ; The HFS filesystem ID
-
- ;Routine Selectors
-
- scsiReset EQU 0
- scsiGet EQU 1
- scsiSelect EQU 2
- scsiCmd EQU 3
- scsiComplete EQU 4
- scsiRead EQU 5
- scsiWrite EQU 6
- scsiInstall EQU 7
- scsiRBlind EQU 8
- scsiWBlind EQU 9
- scsiStat EQU 10
- scsiSelAtn EQU 11
- scsiMsgIn EQU 12
- scsiMsgOut EQU 13
- numSelectors EQU 14
-
-
- MACRO
- _SCSIReset
- MOVE #scsiReset,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIGet
- MOVE #scsiGet,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSISelect
- MOVE #scsiSelect,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSICmd
- MOVE #scsiCmd,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIComplete
- MOVE #scsiComplete,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIRead
- MOVE #scsiRead,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIWrite
- MOVE #scsiWrite,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIInstall
- MOVE #scsiInstall,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIRBlind
- MOVE #scsiRBlind,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIWBlind
- MOVE #scsiWBlind,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIStat
- MOVE #scsiStat,-(sp)
- _SCSIDispatch
- ENDM
-
-
- MACRO
- _scsiSelAtn
- MOVE #scsiSelAtn,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIMsgIn
- MOVE #scsiMsgIn,-(sp)
- _SCSIDispatch
- ENDM
-
- MACRO
- _SCSIMsgOut
- MOVE #scsiMsgOut,-(sp)
- _SCSIDispatch
- ENDM
-
- ;
- ; New SCSI Manager
-
- ;
- ; SCSI request parameter block
- ;
- scsiPB RECORD 0, INCREMENT
- scsiQLink DS.L 1 ; --- link to next request block
- scsiPrivate DS.L 1 ; --- SCSI Mgr private storage
- scsiVersion DS.W 1 ; --> version of the parameter block
- scsiBus DS.W 1 ; --> SCSI bus number
- scsiReqID DS.B 1 ; --> SCSI ID
- scsiReqLUN DS.B 1 ; --> logical unit number
- scsiResult DS.W 1 ; <-- return code from SCSI Manager
- scsiCompletion DS.L 1 ; --> address of completion routine
- scsiUsrData DS.L 1 ; --> pointer to user's storage
- scsiReqTO DS.L 1 ; --> in ms
- scsiUsrFlags DS.W 1 ; --> user's operation flag bits
- scsiSelTO DS.W 1 ; --> in ms
- scsiMgrFlags DS.L 1 ; --> SCSI operation flags
- scsiLinkCmd DS.L 1 ; --> ptr to next linked command
- scsiSnsBuf DS.L 1 ; --> sense buffer pointer
- scsiSnsLen DS.B 1 ; --> length of sense buffer ( at least 4 bytes )
- scsiSnsXfer DS.B 1 ; <-- actual sense bytes transferred
- scsiStatus DS.B 1 ; --> SCSI status byte
- scsiCmdLen DS.B 1 ; --> length of the command buffer
- scsiCmdBuf DS.L 1 ; --> command buffer pointer
- scsiDCInstr DS.L 1 ; --> ptr to array of data-chaining instructions
- scsiDataLen DS.L 1 ; --> requested data transfer length
- scsiDataXfer DS.L 1 ; <-- actual data bytes transferred
- scsiPBSize EQU *-scsiPB ; size of SCSI request parameter block
- ENDR
-
- ;
- ; flags
- ;
- ; SCSI Mgr flags:
- ;
- scsiFParity EQU $00000001 ; Enable parity checking
- scsiFNoDisc EQU $00000002 ; Disconnection not allowed for this request
- scsiFWrite EQU $00000004 ; output data to the SCSI bus
- scsiFFast EQU $00000008 ; Transfer data in the "fast" mode
- scsiFPhysical EQU $00000010 ; physical addresses are used (enables DMA)
- scsiFAsync EQU $00000020 ; asynchronous request
- scsiFBusDevRst EQU $00000040 ; attempt to send a Bus Device Reset message
- scsiFImmed EQU $00000080 ; Immediate ("page fault") service requested
- ; SCSI Mgr bits:
- scsiBParity EQU 0 ; enable parity checking
- scsiBNoDisc EQU 1 ; disconnection not allowed for this request
- scsiBWrite EQU 2 ; output data to the SCSI bus
- scsiBFast EQU 3 ; transfer data in the "fast" mode
- scsiBPhysical EQU 4 ; physical addresses are used (enables DMA)
- scsiBAsync EQU 5 ; asynchronous request
- scsiBBusDevRst EQU 6 ; attempt to send a Bus Device Reset message
- scsiBImmed EQU 7 ; Immediate ("page fault") service requested
-
- ;
- ; Data-chaining related equates
- ;
- dcLoop EQU -1 ; loop opcode (dcLoop,count,offset,store)
- dcStop EQU 0 ; stop opcode (dcStop,-----,------,-----)
- ; ; move opcode ( addr ,count,offset,store)
- dcInstr RECORD 0, INCREMENT
- dcAddr DS.L 1 ; buffer start address (0,-1,other)
- dcCount DS.L 1 ; generic count
- dcOffset DS.L 1 ; generic "offset"
- dcStore DS.L 1 ; used to create "Saved Data Pointer"
- dcSize EQU *-dcInstr ; size of one data-chaining instruction
- ENDR
-
- ;
- ; Status byte equates
- ;
- statusInitial EQU $FF ; initial "invalid" status byte value
- statusByteCode EQU $9E ; mask to clear vendor-unique bits in status byte
- statusRsrvBit EQU 7 ; reserved bit in status byte (must be zero for autosense)
- statusGood EQU $00 ; status byte values with VU and reserved bits masked
- statusChkCond EQU $02
- statusCondMetGood EQU $04
- statusBusy EQU $08
- statusIntGood EQU $10
- statusIntCMGood EQU $14
- statusRsrvConflict EQU $18
-
- ;
- ; error codes on the original call
- ;
- scsiBadPBErr EQU -470 ; invalid field(s) in the parameter block
- ;
- ; error codes in the "scsiResult" field
- ;
- scsiOverrunErr EQU -471 ; attempted to transfer too many bytes
- scsiTransferErr EQU -472 ; write flag conflicts with data transfer phase
- scsiBusTOErr EQU -473 ; bus error during transfer
- scsiSelectTOErr EQU -474 ; scsiSelTO exceeded (selection failed)
- scsiTimeOutErr EQU -475 ; scsiReqTO exceeded
- scsiBusResetErr EQU -476 ; the bus was reset, so your request was aborted
- scsiBadStatus EQU -477 ; non-zero (not "Good") status returned
- scsiNoStatusErr EQU -478 ; device did not go through a status phase
- scsiLinkFailErr EQU -479 ; linked command never executed
- scsiUnimpVctErr EQU -489 ; unimplemented routine was called
- ;
- ; "in progress" codes in the "scsiResult" field
- ;
- scsiEnqueued EQU $0001 ; enqueued, waiting to start
- scsiArbitrated EQU $0002 ; arbitration in progress, or attempted
- scsiSelection EQU $0003 ; selection in progress, or target selected
- scsiDisc EQU $0004 ; disconnected
- scsiDataOut EQU $0010 ; Data Out phase
- scsiDataIn EQU $0011 ; Data In phase
- scsiCommand EQU $0012 ; Command phase
- scsiStatus EQU $0013 ; Status phase
- scsiIllegal1 EQU $0014 ; Unknown (illegal) phase
- scsiIllegal2 EQU $0015 ; Unknown (illegal) phase
- scsiMessageOut EQU $0016 ; Message Out phase
- scsiMessageIn EQU $0017 ; Message In phase
-
- ;
- ; SCSIBusInfo information selectors
- ;
- scsiIntfLvl EQU 0 ; SCSI Mgr interface level (1-n)
- scsiBusTO EQU 1 ; byte-to-byte time limit (in us, 0=no timeout)
- scsiBusDMA EQU 2 ; bus has a dedicated DMA channel (1=has DMA)
-
- ENDIF ; ...already included